RCS "$Id: AgentProtected.sig,v 1.6 1999/07/16 21:16:57 pxs Exp $";
(* See Agent.sig. This is the more permissive version of that. *)
signature SCCS_AGENT_PROTECTED =
sig
  include AGENT

   structure A'  : SCCS_ACT_PROTECTED sharing A = A'

   type literalRelabelling

   type permission 

   datatype privateAgent = Nil
                  | Bottom
                  | Var      of V.var
                  | Prefix   of A.act * agent
                  | Delta    of agent
                  | Time     of int * agent
                  | Sum      of agent list
                  | Parallel of agent list
(* I can't work out how to share type t = s list etc. or I'd do this  *)
(* differently... *)
                  | Permit   of agent *
		    (A'.P.ParticleSet.set MaybeVar.maybeVar)
                  | Relabel  of agent * (literalRelabelling MaybeVar.maybeVar)
(* NOTHING, but NOTHING, should use this directly. Use real and hashval *)
(* Does ML really force me to put it here? *)
   and agent' = DUMMY of (privateAgent * Word.word) ref
     sharing type agent = agent'

   val real : agent -> privateAgent
   val makeAgent : privateAgent -> agent
end

